{template('../public/header.html')}
<!-- -->
{if Not (dbtype="sql" Or dbtype="mssql") }
{asp}
	IF App.Req("action")="Backup" Then
		Call Backupdata()
	ElseIF App.Req("action")="CompactData" Then
		Call CompactData()
	ElseIF App.Req("action")="RestoreData" Then
		IF App.Req("submit")<> "" Then
			Call RestoreData()
		Else
			Call DelBackup()
		End IF
{/asp}
	{else}
		<link href="__TMPL__/backup/css/bakup.css" rel="stylesheet" type="text/css" media="screen" />
		<script type="text/javascript">var tentpath='__TMPL__/backup';</script>
		<script src="__STATIC__/js/jquery/jquery.js"></script>
		<script src="__TMPL__/backup/js/alerts.js"></script>

		<table width="100%" border="0" cellspacing="0" cellpadding="0">
		  <tr>
			<td><table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" Class="tb_style" >
		  <form method="post" action="{:U('backup/index?action=Backup')}">
			<tr bgcolor="#FFFFFF">
			  <td colspan="2" class="td_title" >&nbsp;备份ACCESS数据库</b></td>
			</tr>
			<tr bgcolor="#FFFFFF">
			  <td width="14%" height="30" class="td_border">&nbsp;备份数据库：</td>
			  <td width="86%" height="30" class="td_border"><br />
				<input type="text" name="Bkdbname" value="#{:Date()}-{:AB.E.Md5.To8(Now)}.asa" class="input" size=30>
				<input type="submit" name="submit" class="rb1" id="submit" value=" 确定备份 ">
				&nbsp;<br>
				保存在DataBackup目录，文件名后缀（默认为“.asa”），可自行定义备份名称!
				<input type="hidden" name="Bkfolder" id="Bkfolder" value="{$BakFolder}">
			  </td>
			</tr>
		  </form>
		</table>
		<br>
		<TABLE class=tb_style cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
		  <TBODY>
			<TR>
			  <TD colspan="4" class="td_title">&nbsp;还原ACCESS数据库</TD>
			</TR>
			<TR>
			  <TD width="31%" height=32 class="td_btop3">&nbsp;备份数据库</TD>
			  <TD width="18%" align="center" class="td_btop3">文件大小</TD>
			  <TD width="21%" align="center" class="td_btop3">备份时间</TD>
			  <TD width="30%" align="center" class="td_btop3">操作</TD>
			</TR>
			{asp}
			Dim Fso
			Set Fso=server.createobject("Scripting.FileSystemObject")
			Dim TheFolder,theFile,strFileType,Files
			IF Not Fso.FolderExists(Server.Mappath(SitePath & BakFolder)) Then
				Fso.CreateFolder(Server.Mappath(SitePath & BakFolder))
			End IF

			Set TheFolder=Fso.GetFolder(Server.Mappath(SitePath & BakFolder))
			Set Files = TheFolder.Files

			{/asp}
			{if Files.Count = 0 or (Files.Count = 1 and Fso.FileExists(Server.Mappath(SitePath & BakFolder & "/updatelog.xml"))= true)}
				 <form method="Post" action="{:U('backup/index?action=RestoreData')}" >
					<TR>
					  <TD height=32 class="td_border" colspan="4" align="center"><b>数据还未备份！</b></TD>
					</TR>
				  </form>
			{else}
				{asp}
					For Each theFile In TheFolder.Files
						'IF Fso.getExtensionName(theFile.Name)="mdb" Then
						IF theFile.name <> "updatelog.xml" Then
				{/asp}
						  <form method="Post" action="{:U('backup/index?action=RestoreData')}" >
							<TR>
							  <TD width="31%" height=32 class="td_border">&nbsp;{:theFile.Name}</TD>
							  <TD width="16%" align="center" class="td_border">{:Round(theFile.size/1024) & " KB"}{:ShowMBits(theFile.size)}</TD>
							  <TD width="21%" align="center" class="td_border">{:theFile.DateLastModIFied}</TD>
							  <TD width="32%" align="center" class="td_border"><input name="Filepath" type="hidden" value="{:SitePath & BakFolder}/{:theFile.Name}">
								<input name="submit" type="button" class="rb1" onClick="jConfirm('您确定要还原数据库?', '操作提示', function(r) { if(r==true){window.location='{:U('backup/index?action=RestoreData&submit=1&Filepath=')& server.URLEncode(SitePath & BakFolder&"/"&theFile.Name)}'}});" value="还原数据">
								&nbsp;&nbsp;&nbsp;
							  <input name="Del" type="button" id="btn_del" onclick="jConfirm('您确定要删除备份数据库?', '操作提示', function(r) { if(r==true){window.location='{:U('backup/index?action=RestoreData&Filepath=')& server.URLEncode(SitePath & BakFolder&"/"&theFile.Name)}'}});"  class="rb1"  value="删除备份 "></TD>
							</TR>
						  </form>
				{asp}
						End IF
					Next
				{/asp}
			{/if}
		  </TBODY>

		</TABLE>
		<br>
		<TABLE class=tb_style cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
		  <TBODY>
			<TR>
			  <TD colspan="2" class="td_title">&nbsp;压缩ACCESS数据库</TD>
			</TR>
		  <form method="post" action="{:U('backup/index?action=CompactData')}">
			<TR>
			  <TD width="14%" height=38  class="td_border">&nbsp;压缩数据库： </TD>
			  <TD width="86%" class="td_border"><input type=text name=Bkdbname class="input" value="{:accdb}" size=30 disabled>
			  &nbsp; <input type=submit name="submit2" class="rb1" value="确定压缩">
			  &nbsp; <font color=#444444>（ 数据库大小: <font face="verdana">{:GetFileInfo(accdb)}</font> ）</font>
			  </TD>
			</TR>
			<TR>
			  <TD height=38  class="td_border">&nbsp; </TD>
			  <TD class="td_border"><font color="#FF0000">压缩数据前，建议您先备份数据库。 以免发生意外错误！</FONT></TD>
			</TR>
		  </form>
		</TABLE></td>
		  </tr>
		</table>
	{/if}
	{asp Set Fso = Nothing}
{else}
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><table  width="100%" border="0" align="center" cellpadding="0"  cellspacing="0" class="tb_style">
      <tr>
        <td height="27" class="td_title">&nbsp;ＳＱＬ数据库备份</td>
      </tr>
      <tr>
        <td class="td_border"><blockquote> <b><br />
          一、备份数据库</b> <br />
                <br />
          1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<br />
          2、SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录<br />
          3、选择你的数据库名称（如网站数据库Cl_Web）--&gt;然后点上面菜单中的工具--&gt;选择备份数据库<br />
          4、备份选项选择完全备份，目的中的备份到如果原来有路径和名称则选中名称点删除，然后点添加，如果原来没有路径和名称则直接选择添加，接着指定路径和文件名，指定后点确定返回备份窗口，接着点确定进行备份 <br />
          <br />
          <b>二、还原数据库</b><br />
          <br />
          1、打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server<br />
          2、SQL Server组--&gt;双击打开你的服务器--&gt;点图标栏的新建数据库图标，新建数据库的名字自行取<br />
          3、点击新建好的数据库名称（如网站数据库Cl_Web）--&gt;然后点上面菜单中的工具--&gt;选择恢复数据库<br />
          4、在弹出来的窗口中的还原选项中选择从设备--&gt;点选择设备--&gt;点添加--&gt;然后选择你的备份文件名--&gt;添加后点确定返回，这时候设备栏应该出现您刚才选择的数据库备份文件名，备份号默认为1（如果您对同一个文件做过多次备份，可以点击备份号旁边的查看内容，在复选框中选择最新的一次备份后点确定）--&gt;然后点击上方常规旁边的选项按钮<br />
          5、在出现的窗口中选择在现有数据库上强制还原，以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置（也可以指定自己的目录），逻辑文件名不需要改动，移至物理文件名要根据你所恢复的机器情况做改动，如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data，那么就按照您恢复机器的目录进行相关改动改动，并且最后的文件名最好改成您当前的数据库名（如原来是Cl_Web_data.mdf，现在的数据库是Cl_Web，就改成Cl_Web_data.mdf），日志和数据文件都要按照这样的方式做相关的改动（日志的文件名是*_log.ldf结尾的），这里的恢复目录您可以自由设置，前提是该目录必须存在（如您可以指定d:\sqldata\Cl_Web_data.mdf或者d:\sqldata\Cl_Web_log.ldf），否则恢复将报错<br />
          6、修改完成后，点击下面的确定进行恢复，这时会出现一个进度条，提示恢复的进度，恢复完成后系统会自动提示成功，如中间提示报错，请记录下相关的错误内容并询问对SQL操作比较熟悉的人员，一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误，数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作，如果还提示正在使用的错误可以将SQL服务停止然后重起看看，至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复<br />
          <br />
          <b>三、收缩数据库</b><br />
          <br />
          一般情况下，SQL数据库的收缩并不能很大程度上减小数据库大小，其主要作用是收缩日志大小，应当定期进行此操作以免数据库日志过大<br />
          1、设置数据库模式为简单模式：打开SQL企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器--&gt;双击打开数据库目录--&gt;选择你的数据库名称（如网站数据库Cl_Web）--&gt;然后点击右键选择属性--&gt;选择选项--&gt;在故障还原的模式中选择“简单”，然后按确定保存<br />
          2、在当前数据库上点右键，看所有任务中的收缩数据库，一般里面的默认设置不用调整，直接点确定<br />
          3、<font color="blue">收缩数据库完成后，建议将您的数据库属性重新设置为标准模式，操作方法同第一点，因为日志在一些异常情况下往往是恢复数据库的重要依据</font> <br />
          <br />
          <b>四、设定每日自动备份数据库</b><br />
          <br />
          <font color="red">强烈建议有条件的用户进行此操作！</font><br />
          1、打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器<br />
          2、然后点上面菜单中的工具--&gt;选择数据库维护计划器<br />
          3、下一步选择要进行自动备份的数据--&gt;下一步更新数据优化信息，这里一般不用做选择--&gt;下一步检查数据完整性，也一般不选择<br />
          4、下一步指定数据库维护计划，默认的是1周备份一次，点击更改选择每天备份后点确定<br />
          5、下一步指定备份的磁盘目录，选择指定目录，如您可以在D盘新建一个目录如：d:\databak，然后在这里选择使用此目录，如果您的数据库比较多最好选择为每个数据库建立子目录，然后选择删除早于多少天前的备份，一般设定4－7天，这看您的具体备份要求，备份文件扩展名一般都是bak就用默认的<br />
          6、下一步指定事务日志备份计划，看您的需要做选择--&gt;下一步要生成的报表，一般不做选择--&gt;下一步维护计划历史记录，最好用默认的选项--&gt;下一步完成<br />
          7、完成后系统很可能会提示Sql Server Agent服务未启动，先点确定完成计划设定，然后找到桌面最右边状态栏中的SQL绿色图标，双击点开，在服务中选择Sql Server Agent，然后点击运行箭头，选上下方的当启动OS时自动启动服务<br />
          8、这个时候数据库计划已经成功的运行了，他将按照您上面的设置进行自动备份 <br />
          <br />
          修改计划：<br />
          1、打开企业管理器，在控制台根目录中依次点开Microsoft SQL Server--&gt;SQL Server组--&gt;双击打开你的服务器--&gt;管理--&gt;数据库维护计划--&gt;打开后可看到你设定的计划，可以进行修改或者删除操作 <br />
          <br />
          <b>五、数据的转移（新建数据库或转移服务器）</b><br />
          <br />
          一般情况下，最好使用备份和还原操作来进行转移数据，在特殊情况下，可以用导入导出的方式进行转移，这里介绍的就是导入导出方式，导入导出方式转移数据一个作用就是可以在收缩数据库无效的情况下用来减小（收缩）数据库的大小，本操作默认为您对SQL的操作有一定的了解，如果对其中的部分操作不理解，可以咨询动网相关人员或者查询网上资料<br />
          1、将原数据库的所有表、存储过程导出成一个SQL文件，导出的时候注意在选项中选择编写索引脚本和编写主键、外键、默认值和检查约束脚本选项<br />
          2、新建数据库，对新建数据库执行第一步中所建立的SQL文件<br />
          3、用SQL的导入导出方式，对新数据库导入原数据库中的所有表内容<br />
        </blockquote></td>
      </tr>
    </table></td>
  </tr>
</table>
{/if}

{asp}
Sub CompactData() '压缩数据库
	On Error Resume Next
	Dim Fso,Engine,StrdataPath,DataPathx
	DataPathx = Server.Mappath(accdb)
	StrdataPath = left(DataPathx,instrrev(DataPathx,"\"))
	Set Fso=Server.CreateObject("Scripting.FileSystemObject")
	IF Fso.FileExists(Datapathx) Then
		Set Engine = CreateObject("JRO.JetEngine")
		Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataPathx," Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrdataPath & "Temp.mdb"
		If Err.Number<>0 Then
			errTip Err.Description, U("backup/index"), "", ""
		End If
		Err.Clear()
		Fso.CopyFile StrdataPath & "Temp.mdb",DataPathx
		Fso.DeleteFile(StrdataPath & "Temp.mdb")
		Set Fso = Nothing
		Set Engine = Nothing
		If Err.Number=0 Then
			winTip "数据库压缩成功！", U("backup/index"), "", ""
		Else
			errTip "压缩数据库失败！", U("backup/index"), "", ""
		End If
	Else
		errTip "压缩数据库失败！", U("backup/index"), "", ""
	End IF
End Sub

Sub Backupdata() '备份数据库
	On Error Resume Next
	Dim Fso,Bkdbname,BkFolder,BackDBpath
	Bkdbname=Request.Form("Bkdbname")
	BkFolder=Request.Form("BkFolder")
	BackDBpath=Server.Mappath(SitePath & Bkfolder)
	IF Bkdbname="" Then Bkdbname=date()
	Set Fso=server.createobject("scripting.filesystemobject")
	IF Fso.FileExists(Server.Mappath(accdb)) Then
		IF CheckDir(BackDBpath) = True Then
			Fso.copyfile Server.Mappath(accdb),BackDBpath& "\"& Bkdbname &""
		Else
			MakeNewsDir BackDBpath
			Fso.copyfile Server.Mappath(accdb),BackDBpath& "\"& Bkdbname &""
		End IF
		winTip "数据库备份成功！", U("backup/index"), "", ""
	Else
		errTip "找不到源数据库文件！", U("backup/index"), "", ""
	End IF
End sub

Sub DelBackup() '删除数据库
	On Error Resume Next
	Dim Fso,Filepath
	Filepath=Request("Filepath")
	IF Filepath="" Then
		errTip "出错了，请指定备份的数据库文件名！", U("backup/index"), "", ""
	end IF
	Set Fso=Server.createobject("Scripting.FileSystemObject")
	Fso.DeleteFile(Server.Mappath(Filepath))
	winTip "成功删除数据库！", U("backup/index"), "", ""
	Set Fso=Nothing
End sub

Sub RestoreData() '恢复数据库
	On Error Resume Next
	On Error Goto 0
	Dim Filepath,Fso
	Filepath=Request("Filepath")
	IF Filepath="" Then
		errTip "出错了，请指定原备份的数据库文件名！", U("backup/index"), "", ""
	End IF
	Filepath=Server.Mappath(Filepath)
	Set Fso=server.createobject("Scripting.FileSystemObject")
	IF Fso.FileExists(Filepath) Then
		Fso.Copyfile Filepath,Server.Mappath(accdb)
		winTip "成功恢复数据！", U("backup/index"), "", ""
	Else
		errTip "出错了，找不到指定的备份文件！", U("backup/index"), "", ""
	End IF
	Set Fso=Nothing
End Sub

Function CheckDir(Folderpath) '检查某一目录是否存在
	On Error Resume Next
    Dim fs : Set fs = CreateObject("Scripting.FileSystemObject")
    IF fs.FolderExists(Folderpath) Then
       CheckDir = True
    Else
       CheckDir = False
    End IF
    Set fs = nothing
End Function

Function MakeNewsDir(foldername) '根据指定名称生成目录
	Dim fs,f
	on error resume next
    Set fs = CreateObject("Scripting.FileSystemObject")
        Set f = fs.CreateFolder(foldername)
        MakeNewsDir = True
    Set fs = nothing
End Function

Function ShowMBits(bits)
	Dim showsize
	if bits>1024*1024 then
		showsize = "&nbsp;&nbsp;<font color=#999999>(" & formatnumber(bits/1024/1024,2) & " MB)</font>"
	elseif bits>1024 then
		showsize = "&nbsp;&nbsp;<font color=#999999>(" & formatnumber(bits/1024,2) & " KB)</font>"
	else
		showsize = "&nbsp;&nbsp;<font color=#999999>(" & bits & " Byte)</font>"
	end if
	ShowMBits=showsize
End Function

Function GetFileInfo(file) '获取数据库大小
	Dim fs, f, s, showsize
	Set fs = Server.CreateObject("Scripting.FileSystemObject")
	Set f = fs.GetFile(server.mappath(file))
	s = f.size
	if s>1024*1024 then
		showsize=formatnumber(s/1024/1024,2) & " MB"
	elseif s>1024 then
		showsize=formatnumber(s/1024,2) & " KB"
	else
		showsize=s & " Byte"
	end if
	GetFileInfo = showsize
End Function
{/asp}

</body>
</html>